home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Developers / MW MPW Binaries 1.1.1a2 / mwcPPC / MWCIncludes / streambuf < prev    next >
Encoding:
Text File  |  1994-08-10  |  3.9 KB  |  146 lines  |  [TEXT/MMCC]

  1. // streambuf standard header
  2. #ifndef _STREAMBUF_
  3. #define _STREAMBUF_
  4. #include <ios>
  5.  
  6. #if __MWERKS__
  7. #pragma options align=mac68k
  8. #endif
  9.  
  10.         // macros
  11. #define EOF    (-1)
  12.         // type streamoff
  13. typedef long streamoff;
  14. const streamoff _BADOFF = -1;
  15.         // class streampos
  16. class streampos {
  17. public:
  18.     streampos(streamoff = 0, const _Fpost * = 0);
  19.     streamoff offset() const;
  20.     streamoff operator-(const streampos&) const;
  21.     streampos& operator+=(streamoff _O)
  22.         {_Pos += _O; return (*this); }
  23.     streampos& operator-=(streamoff _O)
  24.         {_Pos -= _O; return (*this); }
  25.     streampos operator+(streamoff _O) const
  26.         {return (streampos(*this) += _O); }
  27.     streampos operator-(streamoff _O) const
  28.         {return (streampos(*this) -= _O); }
  29.     _Bool operator==(const streampos&) const;
  30.     _Bool operator!=(const streampos& _R) const
  31.         {return (!(*this == _R)); }
  32.     _Fpost *_Fpos()
  33.         {return (&_Fp); }
  34. private:
  35.     streamoff _Pos;
  36.     _Fpost _Fp;
  37.     };
  38.         // class streambuf
  39. class streambuf {
  40. public:
  41.     virtual ~streambuf();
  42.     streampos pubseekoff(streamoff _O, ios::seekdir _W,
  43.         ios::openmode _M = ios::in | ios::out)
  44.         {return (seekoff(_O, _W, _M)); }
  45.     streampos pubseekpos(streampos _P,
  46.         ios::openmode _M = ios::in | ios::out)
  47.         {return (seekpos(_P, _M)); }
  48.     streambuf *pubsetbuf(char *_S, int _N)
  49.         {return (setbuf(_S, _N)); }
  50.     int pubsync()
  51.         {return (sync()); }
  52.     int sbumpc()
  53.         {return (gptr() != 0 && gptr() < egptr()
  54.             ? *_Gn()++ : uflow()); }
  55.     int sgetc()
  56.         {return (gptr() != 0 && gptr() < egptr()
  57.             ? *_Gn() : underflow()); }
  58.     int sgetn(char *_S, int _N)
  59.         {return (xsgetn(_S, _N)); }
  60.     int snextc()
  61.         {return (sbumpc() == EOF ? EOF : sgetc()); }
  62.     int sputbackc(char _C)
  63.         {return (gptr() != 0 && eback() < gptr()
  64.             && _C == gptr()[-1]
  65.             ? *--_Gn() : pbackfail((unsigned char)_C)); }
  66.     int sungetc()
  67.         {return (gptr() != 0 && eback() < gptr()
  68.             ? *--_Gn() : pbackfail()); }
  69.     int sputc(int _C)
  70.         {return (pptr() != 0 && pptr() < epptr()
  71.             ? (*_Pn()++ = _C) : overflow(_C)); }
  72.     int sputn(const char *_S, int _N)
  73.         {return (xsputn(_S, _N)); }
  74. #if _HAS_ENUM_OVERLOADING
  75.     streampos pubseekoff(streamoff _O, ios::seek_dir _W,
  76.         ios::open_mode _M = ios::in | ios::out)
  77.         {return (pubseekoff(_O, (seekdir)_W, (openmode)_M)); }
  78.     streampos pubseekpos(streampos _P,
  79.         ios::open_mode _M = ios::in | ios::out)
  80.         {return (seekpos(_P, (openmode)_M)); }
  81. #endif
  82. protected:
  83.     streambuf()
  84.         {_Init(); }
  85.     streambuf(ios::_Uninitialized)
  86.         {}
  87.     char *eback() const
  88.         {return (*_IGbeg); }
  89.     char *gptr() const
  90.         {return (*_IGnext); }
  91.     char *egptr() const
  92.         {return (*_IGend); }
  93.     void gbump(int _N)
  94.         {*_IGnext += _N; }
  95.     void setg(char *_B, char *_N, char *_E)
  96.         {*_IGbeg = _B, *_IGnext = _N, *_IGend = _E; }
  97.     char *pbase() const
  98.         {return (*_IPbeg); }
  99.     char *pptr() const
  100.         {return (*_IPnext); }
  101.     char *epptr() const
  102.         {return (*_IPend); }
  103.     void pbump(int _N)
  104.         {*_IPnext += _N; }
  105.     void setp(char *_B, char *_E)
  106.         {*_IPbeg = _B, *_IPnext = _B, *_IPend = _E; }
  107.     void setp(char *_B, char *_N, char *_E)
  108.         {*_IPbeg = _B, *_IPnext = _N, *_IPend = _E; }
  109.     unsigned char *&_Gn()
  110.         {return ((unsigned char *&)*_IGnext); }
  111.     unsigned char *&_Pn()
  112.         {return ((unsigned char *&)*_IPnext); }
  113.     virtual int overflow(int = EOF);
  114.     virtual int pbackfail(int = EOF);
  115.     virtual int underflow();
  116.     virtual int uflow();
  117.     virtual int xsgetn(char *, int);
  118.     virtual int xsputn(const char *, int);
  119.     virtual streampos seekoff(streamoff, ios::seekdir,
  120.         ios::openmode = ios::in | ios::out);
  121.     virtual streampos seekpos(streampos,
  122.         ios::openmode = ios::in | ios::out);
  123.     virtual streambuf *setbuf(char *, int);
  124.     virtual int sync();
  125.     void _Init();
  126.     void _Init(char **, char **, char **, char **, char **,
  127.         char **);
  128. private:
  129.     char *_Gbeg, *_Gnext, *_Gend;
  130.     char *_Pbeg, *_Pnext, *_Pend;
  131.     char **_IGbeg, **_IGnext, **_IGend;
  132.     char **_IPbeg, **_IPnext, **_IPend;
  133.     };
  134.  
  135. #if __MWERKS__
  136. #pragma options align=reset
  137. #endif
  138.  
  139. #endif
  140.  
  141. /*
  142.  * Copyright (c) 1994 by P.J. Plauger.  ALL RIGHTS RESERVED. 
  143.  * Consult your license regarding permissions and restrictions.
  144.  */
  145.  
  146.